package com.xygz.orm;

import com.xygz.orm.model.ColumnData;

import java.util.Collection;
import java.util.function.Predicate;

/**
 * 条件查询器
 *
 * @author xiyuan-lgz 2023-09-26 @version v1.0.0 新建与整理
 */
@SuppressWarnings("all")
public interface SQLWhere<Child extends SQLWhere<Child>> extends Cloneable {
    
    /*******************************************************************/
    // ‘is null’ 条件
    /*******************************************************************/
    
    /**
     * 添加 is null 条件，
     * <p>
     * 例：select * from user where score is null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public Child isNull(boolean flag, String column);
    
    /**
     * 添加 is null 条件，
     * <p>
     * 例：select * from user where score is null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public <E> Child isNull(boolean flag, SFunc<E, ?> column);
    
    
    /**
     * 添加 is null 条件，
     * <p>
     * 例：select * from user where score is null
     *
     * @param column        列名
     * @return              当前对象
     */
    default Child isNull(String column) {return isNull(true, column);}
    
    /**
     * 添加 is null 条件，
     * <p>
     * 例：select * from user where score is null
     *
     * @param column        列名
     * @return              当前对象
     */
    default <E> Child isNull(SFunc<E, ?> column) {return isNull(true, column);}
    
    
    /*******************************************************************/
    // ‘is not null’ 条件
    
    /*******************************************************************/
    
    /**
     * 添加 is not null 条件，
     * <p>
     * 例：select * from user where score is not null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public Child isNotNull(boolean flag, String column);
    
    /**
     * 添加 is not null 条件，
     * <p>
     * 例：select * from user where score is not null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public <E> Child isNotNull(boolean flag, SFunc<E, ?> column);
    
    
    /**
     * 添加 is not null 条件，
     * <p>
     * 例：select * from user where score is not null
     *
     * @param column        列名
     * @return              当前对象
     */
    default Child isNotNull(String column) {return isNotNull(true, column);}
    
    /**
     * 添加 is not null 条件，
     * <p>
     * 例：select * from user where score is not null
     *
     * @param column        列名
     * @return              当前对象
     */
    default <E> Child isNotNull(SFunc<E, ?> column) {return isNotNull(true, column);}
    
    
    /*******************************************************************/
    // 等于条件 ‘=’
    /*******************************************************************/
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    public Child eq(boolean flag, String column, Object val);
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名获取器
     * @param val           列值
     * @return              查询器本身
     */
    public <E> Child eq(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    default Child eq(Predicate<Object> predicate, String column, Object val){return eq(predicate.test(val), column, val);}
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    default <E> Child eq(Predicate<Object> predicate, SFunc<E, ?> column, Object val){return eq(predicate.test(val), column, val);}
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    default Child eq(String column, Object val) {return eq(true, column, val);}
    
    /**
     * 添加等于条件 ‘=’
     * <p>
     * 例：select * from user where score = 80
     *
     * @param column 数据库
     * @param val           列值
     * @return              查询器本身
     */
    default <E> Child eq(SFunc<E, ?> column, Object val) {return eq(true, column, val);}
    
    /*******************************************************************/
    // 不等于 ‘<>’ 条件
    
    /*******************************************************************/
    
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child ne(boolean flag, String column, Object val);
    
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child ne(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child ne(Predicate<Object> predicate, String column, Object val) {
         return ne(predicate.test(val), column, val);
    }
    
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child ne(Predicate<Object> predicate, SFunc<E, ?> column, Object val){return ne(predicate.test(val), column, val);}
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child ne(String column, Object val) {return ne(true, column, val);}
    
    /**
     * 添加 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where score <> 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child ne(SFunc<E, ?> column, Object val) {return ne(true, column, val);}
    
    
    /*******************************************************************/
    // 小于 ‘<’ 条件
    /*******************************************************************/
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child lt(boolean flag, String column, Object val);
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child lt(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child lt(Predicate<Object> predicate, String column, Object val){return lt(predicate.test(val),column,val);}
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child lt(Predicate<Object> predicate, SFunc<E, ?> column, Object val){return lt(predicate.test(val),column,val);}
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child lt(String column, Object val) {return lt(true, column, val);}
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where score < 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child lt(SFunc<E, ?> column, Object val) {return lt(true, column, val);}
    
    /*******************************************************************/
    // 小于等于 ‘<=’ 条件
    /*******************************************************************/
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child lte(boolean flag, String column, Object val);
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child lte(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child lte(Predicate<Object> predicate, String column, Object val) {
        return lte(predicate.test(val), column, val);
    }
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child lte(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return lte(predicate.test(val), column, val);
    }
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child lte(String column, Object val) {return lte(true, column, val);}
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where score <= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child lte(SFunc<E, ?> column, Object val) {return lte(true, column, val);}
    
    
    /*******************************************************************/
    // 大于等于 ‘>=’ 条件
    /*******************************************************************/
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child gte(boolean flag, String column, Object val);
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child gte(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child gte(Predicate<Object> predicate, String column, Object val) {
        return gte(predicate.test(val), column, val);
    }
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child gte(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return gte(predicate.test(val), column, val);
    }
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child gte(String column, Object val) {return gte(true, column, val);}
    
    /**
     * 添加大于等于 '>=' 条件
     * <p>
     * 例：select * from user where score >= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child gte(SFunc<E, ?> column, Object val) {return gte(true, column, val);}
    
    /*******************************************************************/
    // 大于 ‘>’ 条件
    /*******************************************************************/
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child gt(boolean flag, String column, Object val);
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child gt(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child gt(Predicate<Object> predicate, String column, Object val) {
        return gt(predicate.test(val), column, val);
    }
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child gt(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return gt(predicate.test(val), column, val);
    }
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child gt(String column, Object val) {return gt(true, column, val);}
    
    /**
     * 添加大于 '>' 条件
     * <p>
     * 例：select * from user where score > 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child gt(SFunc<E, ?> column, Object val) {return gt(true, column, val);}
    
    /*******************************************************************/
    // 'in ' 条件
    /*******************************************************************/
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T> Child in(boolean flag, String column, Selector<T> subQuery);
    
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public  <T, E> Child in(boolean flag, SFunc<E, ?> column, Selector<T> subQuery);
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child in(Predicate<Selector<T>> predicate, String column, Selector<T> subQuery) {
        return in(predicate.test(subQuery), column, subQuery);
    }
    
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T, E> Child in(Predicate<Selector<T>> predicate, SFunc<E, ?> column, Selector<T> subQuery) {
        return in(predicate.test(subQuery), column, subQuery);
    }
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    public Child in(boolean flag, String column, Object... vals);
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public Child in(boolean flag, String column, Collection<Object> vals);
    
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    public <E> Child in(boolean flag, SFunc<E, ?> column, Object... vals);
    
    /**
     * 添加 in 条件
     * <p>
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public <E> Child in(boolean flag, SFunc<E, ?> column, Collection<Object> vals);
    
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child in(Predicate<Object> predicate, String column, Object... vals) {
        return in(predicate.test(vals), column, vals);
    }
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child in(Predicate<Collection<Object>> predicate, String column, Collection<Object> vals) {
        return in(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default <E> Child in(Predicate<Object> predicate, SFunc<E, ?> column, Object... vals) {
        return in(predicate.test(vals), column, vals);
    }
    
    /**
     * 添加 in 条件
     * <p>
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child in(Predicate<Object> predicate, SFunc<E, ?> column, Collection<Object> vals) {
        return in(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child in(String column,  Object... vals) {return in(true, column,  vals);}
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child in(String column, Collection<Object> vals) {return in(true, column, vals);}
    
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default <E> Child in(SFunc<E, ?> column, Object... vals) {
        return in(true, column, vals);
    }
    
    /**
     * 添加 in 条件
     * <p>
     * 例：select * from user where id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child in(SFunc<E, ?> column, Collection<Object> vals) {return in(true, column, vals);}
    
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child in(String column, Selector<T> subQuery) {
        return in(true, column, subQuery);
    }
    
    
    /**
     * 添加子查询 in 条件
     * <p>
     * 例：select * from user where id in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T, E> Child in(SFunc<E, ?> column, Selector<T> subQuery) {
        return in(true, column, subQuery);
    }
    
    /*******************************************************************/
    // not in 条件
    
    /*******************************************************************/
    
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T> Child notIn(boolean flag, String column, Selector<T> subQuery);
    
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T,E> Child notIn(boolean flag, SFunc<E, ?> column, Selector<T> subQuery);
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child notIn(Predicate<Selector<T>> predicate, String column, Selector<T> subQuery) {
        return notIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child notIn(Predicate<Selector<T>> predicate, SFunc<E, ?> column, Selector<T> subQuery) {
        return notIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    public Child notIn(boolean flag, String column, Object... vals);
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public Child notIn(boolean flag, String column, Collection<Object> vals);
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    public <E> Child notIn(boolean flag, SFunc<E, ?> column, Object... vals);
    
    /**
     * 添加  not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public <E> Child notIn(boolean flag, SFunc<E, ?> column, Collection<Object> vals);
    
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child notIn(Predicate<Object> predicate, String column, Object... vals) {
        return notIn(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child notIn(Predicate<Object> predicate, String column, Collection<Object> vals) {
        return notIn(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default <E> Child notIn(Predicate<Object> predicate, SFunc<E, ?> column, Object... vals) {
        return notIn(predicate.test(vals), column, vals);
    }
    
    /**
     * 添加  not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child notIn(Predicate<Object> predicate, SFunc<E, ?> column, Collection<Object> vals) {
        return notIn(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child notIn(String column, Selector<T> subQuery) {
        return notIn(true, column, subQuery);
    }
    
    
    /**
     * 添加子查询 not in 条件
     * <p>
     * 例：select * from user where id not in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child notIn(SFunc<E, ?> column, Selector<T> subQuery) {
        return notIn(true, column, subQuery);
    }
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child notIn(String column, Object... vals) {return notIn(true, column, vals);}
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child notIn(String column, Collection<Object> vals) {return notIn(true, column, vals);}
    
    
    /**
     * 添加  not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default <E> Child notIn(SFunc<E, ?> column, Object... vals) {return notIn(true, column, vals);}
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child notIn(SFunc<E, ?> column, Collection<Object> vals) {return notIn(true, column, vals);}
    
    /*******************************************************************/
    // between 条件
    
    /*******************************************************************/
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public Child between(boolean flag, String column, Object start, Object end);
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public <E> Child between(boolean flag, SFunc<E, ?> column, Object start, Object end);
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child between(Predicate<ColumnData<String, Object>> predicate, String column, Object start, Object end) {
        return between(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child between(Predicate<ColumnData<SFunc<E, ?>, Object>> predicate, SFunc<E, ?> column, Object start, Object end) {
        return between(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child between(String column, Object start, Object end) {return between(true, column, start, end);}
    
    /**
     * 添加 between 条件
     * <p>
     * 例：select * from user where score between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child between(SFunc<E, ?> column, Object start, Object end) {
        return between(true, column, start, end);
    }
    
    
    /*******************************************************************/
    // not between 条件
    
    /*******************************************************************/
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    public Child notBetween(boolean flag, String column, Object start, Object end);
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    public <E> Child notBetween(boolean flag, SFunc<E, ?> column, Object start, Object end);
    
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    default Child notBetween(Predicate<ColumnData<String, Object>> predicate, String column, Object start, Object end) {
        return notBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child notBetween(Predicate<ColumnData<SFunc<E, ?>, Object>> predicate, SFunc<E, ?> column, Object start, Object end) {
        return notBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    default Child notBetween(String column, Object start, Object end) {
        return notBetween(true, column, start, end);
    }
    
    /**
     * 添加 not between 条件
     * <p>
     * 例：select * from user where score not between 50 and 80
     *
     * @param column        列名
     * @param start         起始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child notBetween(SFunc<E, ?> column, Object start, Object end) {
        return notBetween(true, column, start, end);
    }
    
    /*******************************************************************/
    // like 条件, 左右 '%like%'
    
    /*******************************************************************/
    
    /**
     * 添加like 条件，'like %值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child like(boolean flag, String column, Object val);
    
    /**
     * 添加like 条件，like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child like(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加like 条件，'like %值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child like(Predicate<Object> predicate, String column, Object val) {
        return like(predicate.test(val), column, val);
    }
    
    /**
     * 添加like 条件，like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child like(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return like(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加like 条件. like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child like(String column, Object val) {return like(true, column, val);}
    
    /**
     * 添加like 条件. like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child like(SFunc<E, ?> column, Object val) {return like(true, column, val);}
    
    
    /*******************************************************************/
    // left like 条件 左like   '%like'
    /*******************************************************************/
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child likeLeft(boolean flag, String column, Object val);
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child likeLeft(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child likeLeft(Predicate<Object> predicate, String column, Object val) {
        return likeLeft(predicate.test(val), column, val);
    }
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child likeLeft(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return likeLeft(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child likeLeft(String column, Object val) {return likeLeft(true, column, val);}
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where score = 80 and name  like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child likeLeft(SFunc<E, ?> column, Object val) {return likeLeft(true, column, val);}
    
    
    /*******************************************************************/
    // right like 条件 左like   'like%'
    /*******************************************************************/
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child likeRight(boolean flag, String column, Object val);
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child likeRight(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child likeRight(Predicate<Object> predicate, String column, Object val) {
        return likeRight(predicate.test(val), column, val);
    }
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child likeRight(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return likeRight(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child likeRight(String column, Object val) {return likeRight(true, column, val);}
    
    /**
     * 添加右边like 条件. like '值%'
     * <p>
     * 例：select * from user where score = 80 and name  like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child likeRight(SFunc<E, ?> column, Object val) {return likeRight(true, column, val);}
    
    
    /*******************************************************************/
    // not like 条件, 左右 '%like%'
    
    /*******************************************************************/
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child notLike(boolean flag, String column, Object val);
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child notLike(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLike(Predicate<Object> predicate, String column, Object val) {
        return notLike(predicate.test(val), column, val);
    }
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLike(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return notLike(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLike(String column, Object val) {return notLike(true, column, val);}
    
    /**
     * 添加not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLike(SFunc<E, ?> column, Object val) {return notLike(true, column, val);}
    
    
    /*******************************************************************/
    // not left like 条件 左like   '%like'
    /*******************************************************************/
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child notLikeLeft(boolean flag, String column, Object val);
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child notLikeLeft(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLikeLeft(Predicate<Object> predicate, String column, Object val) {
        return notLikeLeft(predicate.test(val), column, val);
    }
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLikeLeft(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return notLikeLeft(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLikeLeft(String column, Object val) {return notLikeLeft(true, column, val);}
    
    /**
     * 添加左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where score = 80 and name not like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLikeLeft(SFunc<E, ?> column, Object val) {return notLikeLeft(true, column, val);}
    
    
    /*******************************************************************/
    // not right like 条件 左like  not 'like%'
    /*******************************************************************/
    
    /**
     * 添加右边 not like 条件. not like '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child notLikeRight(boolean flag, String column, Object val);
    
    /**
     * 添加右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child notLikeRight(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加右边 not like 条件. not like '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLikeRight(Predicate<Object> predicate, String column, Object val) {
        return notLikeRight(predicate.test(val), column, val);
    }
    
    /**
     * 添加右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLikeRight(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return notLikeRight(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child notLikeRight(String column, Object val) {return notLikeRight(true, column, val);}
    
    /**
     * 添加右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where score = 80 and name not like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child notLikeRight(SFunc<E, ?> column, Object val) {return notLikeRight(true, column, val);}
    
    /*******************************************************************/
    // or 条件
    /*******************************************************************/
    
    
    /*******************************************************************/
    // or ‘is null’ 条件
    /*******************************************************************/
    
    /**
     * 添加 or is null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public Child orIsNull(boolean flag, String column);
    
    /**
     * 添加 or is null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public <E> Child orIsNull(boolean flag, SFunc<E, ?> column);
    
    /**
     * 添加 or is null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is null
     *
     * @param column        列名
     * @return              当前对象
     */
    default Child orIsNull(String column) {return orIsNull(true, column);}
    
    /**
     * 添加 or  is null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is null
     *
     * @param column        列名
     * @return              当前对象
     */
    default <E> Child orIsNull(SFunc<E, ?> column) {return orIsNull(true, column);}
    
    
    /*******************************************************************/
    // or ‘is not null’ 条件
    
    /*******************************************************************/
    
    /**
     * 添加 or is not null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is not null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public Child orIsNotNull(boolean flag, String column);
    
    /**
     * 添加 or is not null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is not null
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @return              当前对象
     */
    public <E> Child orIsNotNull(boolean flag, SFunc<E, ?> column);
    
    
    /**
     * 添加 or  is not null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is not null
     *
     * @param column        列名
     * @return              当前对象
     */
    default Child orIsNotNull(String column) {return orIsNotNull(true, column);}
    
    /**
     * 添加 or  is not null 条件，
     * <p>
     * 例：select * from user where state = 1 or score is not null
     *
     * @param column        列名
     * @return              当前对象
     */
    default <E> Child orIsNotNull(SFunc<E, ?> column) {return orIsNotNull(true, column);}
    
    
    /*******************************************************************/
    // or 等于条件 ‘=’
    /*******************************************************************/
    
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    public Child orEq(boolean flag, String column, Object val);
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名获取器
     * @param val           列值
     * @return              查询器本身
     */
    public <E> Child orEq(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    default Child orEq(Predicate<Object> predicate, String column, Object val) {
        return orEq(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名获取器
     * @param val           列值
     * @return              查询器本身
     */
    default <E> Child orEq(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orEq(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器本身
     */
    default Child orEq(String column, Object val) {return orEq(true, column, val);}
    
    /**
     * 添加 or 等于条件 ‘=’
     * <p>
     * 例：select * from user where state = 1 or score = 80
     *
     * @param column 数据库
     * @param val           列值
     * @return              查询器本身
     */
    default <E> Child orEq(SFunc<E, ?> column, Object val) {return orEq(true, column, val);}
    
    
    /*******************************************************************/
    // or 不等于 ‘<>’ 条件
    
    /*******************************************************************/
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orNe(boolean flag, String column, Object val);
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orNe(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNe(Predicate<Object> predicate, String column, Object val) {
        return orNe(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNe(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orNe(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNe(String column, Object val) {return orNe(true, column, val);}
    
    /**
     * 添加 or 不等于条件 ‘<>’
     * <p>
     * 例：select * from user where state = 1 or score <> 80
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNe(SFunc<E, ?> column, Object val) {return orNe(true, column, val);}
    
    
    /*******************************************************************/
    // or 小于 ‘<’ 条件
    /*******************************************************************/
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child orLt(boolean flag, String column, Object val);
    
    /**
     * 添加 or 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child orLt(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orLt(Predicate<Object> predicate, String column, Object val) {
        return orLt(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orLt(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orLt(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orLt(String column, Object val) {return orLt(true, column, val);}
    
    /**
     * 添加 小于 ‘<’ 条件
     * <p>
     * 例：select * from user where state = 1 or score < 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orLt(SFunc<E, ?> column, Object val) {return orLt(true, column, val);}
    
    /*******************************************************************/
    // or 小于等于 ‘<=’ 条件
    /*******************************************************************/
    
    /**
     * 添加 or 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child orLte(boolean flag, String column, Object val);
    
    /**
     * 添加 or 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child orLte(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 or 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orLte(Predicate<Object> predicate, String column, Object val) {
        return orLte(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orLte(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orLte(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orLte(String column, Object val) {return orLte(true, column, val);}
    
    /**
     * 添加 小于等于 条件 ‘<=’
     * <p>
     * 例：select * from user where state = 1 or score <= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orLte(SFunc<E, ?> column, Object val) {return orLte(true, column, val);}
    
    
    /*******************************************************************/
    // or 大于等于 ‘>=’ 条件
    /*******************************************************************/
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child orGte(boolean flag, String column, Object val);
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child orGte(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orGte(Predicate<Object> predicate, String column, Object val) {
        return orGte(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orGte(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orGte(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orGte(String column, Object val) {return orGte(true, column, val);}
    
    /**
     * 添加 or 大于等于 '>=' 条件
     * <p>
     * 例：select * from user where state = 1 or score >= 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orGte(SFunc<E, ?> column, Object val) {return orGte(true, column, val);}
    
    /*******************************************************************/
    // or 大于 ‘>’ 条件
    /*******************************************************************/
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public Child orGt(boolean flag, String column, Object val);
    
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    public <E> Child orGt(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orGt(Predicate<Object> predicate, String column, Object val) {
        return orGt(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orGt(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orGt(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default Child orGt(String column, Object val) {return orGt(true, column, val);}
    
    /**
     * 添加 or 大于 '>' 条件
     * <p>
     * 例：select * from user where state = 1 or score > 80
     *
     * @param column        列名
     * @param val           列值
     * @return              当前对象
     */
    default <E> Child orGt(SFunc<E, ?> column, Object val) {return orGt(true, column, val);}
    
    /*******************************************************************/
    // or 'in ' 条件
    /*******************************************************************/
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T> Child orIn(boolean flag, String column, Selector<T> subQuery);
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T,E> Child orIn(boolean flag, SFunc<E, ?> column, Selector<T> subQuery);
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child orIn(Predicate<Selector<T>> predicate, String column, Selector<T> subQuery) {
        return orIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child orIn(Predicate<Selector<T>> predicate, SFunc<E, ?> column, Selector<T> subQuery) {
        return orIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    
    /**
     * 添加 or in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    public Child orIn(boolean flag, String column, Object... vals);
    
    /**
     * 添加 or in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public Child orIn(boolean flag, String column, Collection<Object> vals);
    
    
    /**
     * 添加 or in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    public <E> Child orIn(boolean flag, SFunc<E, ?> column, Object... vals);
    
    /**
     * 添加 or in 条件
     * <p>
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public <E> Child orIn(boolean flag, SFunc<E, ?> column, Collection<Object> vals);
    
    
    /**
     * 添加 or in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child orIn(String column,  Object... vals) {
        return orIn(true, column, vals);
    }
    
    /**
     * 添加 or  in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child orIn(String column, Collection<Object> vals) {return orIn(true, column, vals);}
    
    
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child orIn(String column, Selector<T> subQuery) {
        return orIn(true, column, subQuery);
    }
    
    
    /**
     * 添加 or 子查询 in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child orIn(SFunc<E, ?> column, Selector<T> subQuery) {
        return orIn(true, column, subQuery);
    }
    
    /**
     * 添加 or  in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child orIn(SFunc<E, ?> column, Object... vals) {return orIn(true, column, vals);}
    
    /**
     * 添加 or in 条件
     * <p>
     * 例：select * from user where state = 1 or id in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child orIn(SFunc<E, ?> column, Collection<Object> vals) {return orIn(true, column, vals);}
    
    /*******************************************************************/
    // not in 条件
    
    /*******************************************************************/
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T> Child orNotIn(boolean flag, String column, Selector<T> subQuery);
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    public <T,E> Child orNotIn(boolean flag, SFunc<E, ?> column, Selector<T> subQuery);
    
    
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    public Child orNotIn(boolean flag, String column, Object... vals);
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    public <E> Child orNotIn(boolean flag, SFunc<E, ?> column, Object... vals);
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public Child orNotIn(boolean flag, String column, Collection<Object> vals);
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    public <E> Child orNotIn(boolean flag, SFunc<E, ?> column, Collection<Object> vals);
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child orNotIn(Predicate<Selector<T>> predicate, String column, Selector<T> subQuery) {
        return orNotIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child orNotIn(Predicate<Selector<T>> predicate, SFunc<E, ?> column, Selector<T> subQuery) {
        return orNotIn(predicate.test(subQuery), column, subQuery);
    }
    
    
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    default Child orNotIn(Predicate<Object> predicate, String column, Object... vals) {
        return orNotIn(predicate.test(vals), column, vals);
    }
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          多个数据值
     * @return              当前对象
     */
    default <E> Child orNotIn(Predicate<Object> predicate, SFunc<E, ?> column, Object... vals) {
        return orNotIn(predicate.test(vals), column, vals);
    }
    
    
    /**
     * 添加 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child orNotIn(Predicate<Object> predicate, String column, Collection<Object> vals) {
        return orNotIn(predicate.test(vals), column, vals);
    }
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child orNotIn(Predicate<Object> predicate, SFunc<E, ?> column, Collection<Object> vals) {
        return orNotIn(predicate.test(vals), column, vals);
    }
    
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T> Child orNotIn(String column, Selector<T> subQuery) {
        return orNotIn(true, column, subQuery);
    }
    
    
    /**
     * 添加 or 子查询 not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (select id from user_score where score < 60)
     *
     * @param column        列名
     * @param subQuery      子查询
     * @return              当前对象
     */
    default <T,E> Child orNotIn(SFunc<E, ?> column, Selector<T> subQuery) {
        return orNotIn(true, column, subQuery);
    }
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值数组
     * @return              当前对象
     */
    default Child orNotIn(String column, Object... vals) {return orNotIn(true, column, vals);}
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child orNotIn(SFunc<E, ?> column, Object... vals) {
        return orNotIn(true, column, vals);
    }
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default Child orNotIn(String column, Collection<Object> vals) {return orNotIn(true, column, vals);}
    
    /**
     * 添加 or not in 条件
     * <p>
     * 例：select * from user where state = 1 or id not in (100, 200, 300, 400, 500)
     *
     * @param column        列名
     * @param vals          数据值集合
     * @return              当前对象
     */
    default <E> Child orNotIn(SFunc<E, ?> column, Collection<Object> vals) {
        return orNotIn(true, column, vals);
    }
    
    /*******************************************************************/
    // between 条件
    
    /*******************************************************************/
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public Child orBetween(boolean flag, String column, Object start, Object end);
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public <E> Child orBetween(boolean flag, SFunc<E, ?> column, Object start, Object end);
    
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child orBetween(Predicate<ColumnData<String, Object>> predicate, String column, Object start, Object end) {
        return orBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child orBetween(Predicate<ColumnData<SFunc<E, ?>, Object>> predicate, SFunc<E, ?> column, Object start, Object end) {
        return orBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child orBetween(String column, Object start, Object end) {
        return orBetween(true, column, start, end);
    }
    
    /**
     * 添加 or between 条件
     * <p>
     * 例：select * from user where state = 1 or score between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child orBetween(SFunc<E, ?> column, Object start, Object end) {
        return orBetween(true, column, start, end);
    }
    
    
    /*******************************************************************/
    // not between 条件
    
    /*******************************************************************/
    
    /**
     * 添加 or not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public Child orNotBetween(boolean flag, String column, Object start, Object end);
    
    /**
     * 添加 or not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    public <E> Child orNotBetween(boolean flag, SFunc<E, ?> column, Object start, Object end);
    
    /**
     * 添加 or not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child orNotBetween(Predicate<ColumnData<String, Object>> predicate, String column, Object start, Object end) {
        return orNotBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 or not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child orNotBetween(Predicate<ColumnData<SFunc<E, ?>, Object>> predicate, SFunc<E, ?> column, Object start, Object end) {
        return orNotBetween(predicate.test(new ColumnData<>(column,start,end)), column, start, end);
    }
    
    /**
     * 添加 or  not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default Child orNotBetween(String column, Object start, Object end) {
        return orNotBetween(true, column, start, end);
    }
    
    /**
     * 添加 or  not between 条件
     * <p>
     * 例：select * from user where state = 1 or score not between 50 and 80
     *
     * @param column        列名
     * @param start         开始值
     * @param end           结束值
     * @return              查询器
     */
    default <E> Child orNotBetween(SFunc<E, ?> column, Object start, Object end) {
        return orNotBetween(true, column, start, end);
    }
    
    /*******************************************************************/
    // or like 条件, 左右 '%like%'
    
    /*******************************************************************/
    
    /**
     * 添加 or like 条件，'like %值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orLike(boolean flag, String column, Object val);
    
    /**
     * 添加like 条件，like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orLike(boolean flag, SFunc<E, ?> column, Object val);
    
    /**
     * 添加 or like 条件，'like %值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orLike(Predicate<Object> predicate, String column, Object val) {
        return orLike(predicate.test(val), column, val);
    }
    
    /**
     * 添加like 条件，like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLike(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orLike(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加like 条件. like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orLike(String column, Object val) {return orLike(true, column, val);}
    
    /**
     * 添加 or like 条件. like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLike(SFunc<E, ?> column, Object val) {return orLike(true, column, val);}
    
    
    /*******************************************************************/
    // left like 条件 左like   '%like'
    /*******************************************************************/
    
    /**
     * 添加 or 左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orLikeLeft(boolean flag, String column, Object val);
    
    /**
     * 添加 or 左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orLikeLeft(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or 左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orLikeLeft(Predicate<Object> predicate, String column, Object val) {
        return orLikeLeft(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLikeLeft(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orLikeLeft(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orLikeLeft(String column, Object val) {return orLikeLeft(true, column, val);}
    
    /**
     * 添加左边like 条件，like '%值'
     * <p>
     * 例：select * from user where state = 1 or name  like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLikeLeft(SFunc<E, ?> column, Object val) {return orLikeLeft(true, column, val);}
    
    
    /*******************************************************************/
    // right like 条件 左like   'like%'
    /*******************************************************************/
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orLikeRight(boolean flag, String column, Object val);
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orLikeRight(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orLikeRight(Predicate<Object> predicate, String column, Object val) {
        return orLikeRight(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLikeRight(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orLikeRight(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or  name  like '张三%'
     *
     * @param column        列名
     * @param val           结束值
     * @return              查询器
     */
    default Child orLikeRight(String column, Object val) {return orLikeRight(true, column, val);}
    
    /**
     * 添加 or 右边like 条件. like '值%'
     * <p>
     * 例：select * from user where state = 1 or name  like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orLikeRight(SFunc<E, ?> column, Object val) {return orLikeRight(true, column, val);}
    
    
    /*******************************************************************/
    // not like 条件, 左右 '%like%'
    /*******************************************************************/
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return column       查询器
     */
    public Child orNotLike(boolean flag, String column, Object val);
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or  name not like '%张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orNotLike(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return column       查询器
     */
    default Child orNotLike(Predicate<Object> predicate, String column, Object val) {
        return orNotLike(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or  name not like '%张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLike(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orNotLike(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or  name not like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNotLike(String column, Object val) {return orNotLike(true, column, val);}
    
    /**
     * 添加 or not like 条件. not like '%值%'
     * <p>
     * 例：select * from user where state = 1 or and name not like '%张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLike(SFunc<E, ?> column, Object val) {return orNotLike(true, column, val);}
    
    
    /*******************************************************************/
    // not left like 条件 左like   '%like'
    /*******************************************************************/
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where state = 1 or  and name not like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orNotLikeLeft(boolean flag, String column, Object val);
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where  state = 1 or name not like '%张三'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orNotLikeLeft(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where state = 1 or  and name not like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNotLikeLeft(Predicate<Object> predicate, String column, Object val) {
        return orNotLikeLeft(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where  state = 1 or name not like '%张三'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLikeLeft(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orNotLikeLeft(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where  state = 1 or name not like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNotLikeLeft(String column, Object val) {return orNotLikeLeft(true, column, val);}
    
    /**
     * 添加 or 左边not like 条件，not like '%值'
     * <p>
     * 例：select * from user where state = 1 or name not like '%张三'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLikeLeft(SFunc<E, ?> column, Object val) {return orNotLikeLeft(true, column, val);}
    
    
    /*******************************************************************/
    // not right like 条件 左like  not 'like%'
    /*******************************************************************/
    
    /**
     * 添加 or 右边 not like 条件. not like '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public Child orNotLikeRight(boolean flag, String column, Object val);
    
    /**
     * 添加 or 右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param flag          添加条件,当flag = true 表示。添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    public <E> Child orNotLikeRight(boolean flag, SFunc<E, ?> column, Object val);
    
    
    /**
     * 添加 or 右边 not like 条件. not like '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNotLikeRight(Predicate<Object> predicate, String column, Object val) {
        return orNotLikeRight(predicate.test(val), column, val);
    }
    
    /**
     * 添加 or 右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param predicate     添加条件,当 predicate 的返回值为 true 表示添加该条件，反之不添加
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLikeRight(Predicate<Object> predicate, SFunc<E, ?> column, Object val) {
        return orNotLikeRight(predicate.test(val), column, val);
    }
    
    
    /**
     * 添加 or 右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default Child orNotLikeRight(String column, Object val) {return orNotLikeRight(true, column, val);}
    
    /**
     * 添加 or 右边 not like 条件. '值%'
     * <p>
     * 例：select * from user where state = 1 or name not like '张三%'
     *
     * @param column        列名
     * @param val           列值
     * @return              查询器
     */
    default <E> Child orNotLikeRight(SFunc<E, ?> column, Object val) {return orNotLikeRight(true, column, val);}
}
